package vista;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;

import javax.swing.JDialog;

import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;
import util.Utilidades;
import modelo.Ciudad;
import modelo.Impuesto;
import modelo.Material;
import modelo.MaterialServicio;
import modelo.Servicio;
import modelo.Status;
import modelo.Sucursal;
import modelo.Tarea;
import modelo.TareaServicio;
import modelo.TipoServicio;
import modelo.dao.Servidor;

/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class DlgServicio extends javax.swing.JDialog {

	{
		//Set Look & Feel
		try {
			javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
	private class MaterialCantidad {
		public MaterialCantidad(Material mat, double cant) {
			material = mat;
			cantidad = cant;
		}
		
		Material material;
		double cantidad;
	}

	private JTabbedPane jTabbedPane1;
	private JDesktopPane DPMateriales;
	private JDesktopPane DPTareas;
	private JTable tbMateriales;
	private JScrollPane jScrollPane1;
	private JScrollPane jScrollPane2;
	private JComboBox cbTipoServicio;
	private JScrollPane jScrollPane3;
	private JTextArea txtaComentarios;
	private JButton btAceptar;
	private JLabel lblComentarios;
	private JLabel lblImpuesto;
	private JComboBox cbImpuesto;
	private JTextField txtDescripcion;
	private JLabel lblDescripcion;
	private JButton btQuitarm;
	private JLabel lblTipoServicio;
	private JButton btAgregarm;
	private JButton btQuitart;
	private JButton btAgregart;
	private JTable tbTareas;
	private JButton btSalir;
	private ArrayList<Tarea> tareas= new ArrayList<Tarea>();
	private ArrayList<TareaServicio> tareas_ser= new ArrayList<TareaServicio>();
	private ArrayList<MaterialServicio> materiales_ser= new ArrayList<MaterialServicio>();
	private AbstractTableModel tbModelTareas=null;
	private AbstractTableModel tbModelMateriales=null;
	private ArrayList<MaterialCantidad> materiales_cant= new ArrayList<MaterialCantidad>();
	
	private ComboBoxModel cbmtser;
	private ComboBoxModel cbmimp;

	/**
	* Auto-generated main method to display this JDialog
	*/
	/*public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame frame = new JFrame();
				DlgServicio inst = new DlgServicio(frame);
				inst.setVisible(true);
			}
		});
	}*/
	
	public DlgServicio(JDialog dialog) {
		super(dialog);
		initGUI();
	}
	
	private void initGUI() {
		try {
			{
				getContentPane().setLayout(null);
				this.setTitle("Servicio");
				{
					jTabbedPane1 = new JTabbedPane();
					getContentPane().add(jTabbedPane1);
					jTabbedPane1.setBounds(69, 139, 410, 186);
					{
						DPMateriales = new JDesktopPane();
						jTabbedPane1.addTab("Materiales", null, DPMateriales, null);
						{
							jScrollPane2 = new JScrollPane();
							DPMateriales.add(jScrollPane2, JLayeredPane.DEFAULT_LAYER);
							jScrollPane2.setBounds(12, 12, 376, 91);
							{
								tbModelMateriales = new AbstractTableModel() {
									@Override
									public Object getValueAt(int fil, int col) {
										MaterialCantidad obj = materiales_cant.get(fil); 
										switch (col) {
										case 0: return obj.material.getDescripcion();
										case 1: return obj.cantidad;
										}
										
										return null;
									}
									
									@Override
									public void setValueAt(Object value,int fil, int col) {
										MaterialCantidad obj = materiales_cant.get(fil);
										
										try {
												int n = Integer.parseInt(value.toString());
											   if (n > 0)
												   obj.cantidad=n;
											   else
												 JOptionPane.showMessageDialog(dser, "Se requiere un numero superior a 0.","Valor menor a cero",JOptionPane.INFORMATION_MESSAGE);
											} catch (NumberFormatException ex) {
											JOptionPane.showMessageDialog(dser, "Valor Invalido","Invalido",JOptionPane.ERROR_MESSAGE);
										 }
									}
									
									@Override
									public int getRowCount() {
										return materiales_cant.size();
									}
									
									@Override
									public String getColumnName(int col) {
										switch (col) {
										case 0: return "Material";	
										case 1: return "Cantidad";
										}
										
										return null;
									}
									@Override
									public int getColumnCount() {
										return 2;
									}
									@Override
									public boolean isCellEditable(int fil, int col) {
										return col == 1;
									}
								};
								
								tbMateriales = new JTable();
								jScrollPane2.setViewportView(tbMateriales);
								tbMateriales.setModel(tbModelMateriales);
								tbMateriales.setBounds(173, 28, 212, 70);
							}
						}
						{
							btQuitarm = new JButton();
							DPMateriales.add(btQuitarm, JLayeredPane.DEFAULT_LAYER);
							btQuitarm.setText("Quitar");
							btQuitarm.setBounds(278, 115, 94, 27);
							
							btQuitarm.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Quitar.png")));
						}
						{
							btAgregarm = new JButton();
							DPMateriales.add(btAgregarm, JLayeredPane.DEFAULT_LAYER);
							btAgregarm.setText("Agregar");
							btAgregarm.setBounds(24, 115, 103, 27);
							btAgregarm.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Agregar.png")));
						}
					}
					{
						DPTareas = new JDesktopPane();
						jTabbedPane1.addTab("Tareas", null, DPTareas, null);
						DPTareas.setPreferredSize(new java.awt.Dimension(318, 160));
						{
							jScrollPane1 = new JScrollPane();
							DPTareas.add(jScrollPane1, JLayeredPane.DEFAULT_LAYER);
							jScrollPane1.setBounds(12, 12, 376, 96);
							{
								tbModelTareas = new AbstractTableModel() {
									@Override
									public Object getValueAt(int fil, int col) {
										switch (col) {
										case 0: return tareas.get(fil).getDescripcion();
										}
										
										return null;
									}
									
									@Override
									public int getRowCount() {
										return tareas.size();
									}
									
									@Override
									public String getColumnName(int col) {
										switch (col) {
										case 0: return "Tareas";	
										}
										
										return null;
									}
									@Override
									public int getColumnCount() {
										return 1;
									}
								};
								tbTareas = new JTable();
								jScrollPane1.setViewportView(tbTareas);
								tbTareas.setModel(tbModelTareas);
								tbTareas.setBounds(219, 34, 101, 42);
							}
						}
						{
							btAgregart = new JButton();
							DPTareas.add(btAgregart, JLayeredPane.DEFAULT_LAYER);
							btAgregart.setText("Agregar");
							btAgregart.setBounds(24, 120, 103, 27);
							btAgregart.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Agregar.png")));
						}
						{
							btQuitart = new JButton();
							DPTareas.add(btQuitart, JLayeredPane.DEFAULT_LAYER);
							btQuitart.setText("Quitar");
							btQuitart.setBounds(283, 120, 94, 27);
							btQuitart.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Quitar.png")));
						}
					}
				}
				{
					lblTipoServicio = new JLabel();
					getContentPane().add(lblTipoServicio);
					lblTipoServicio.setText("Tipo de Servicio:");
					lblTipoServicio.setBounds(30, 22, 112, 14);
					lblTipoServicio.setFont(new java.awt.Font("Tahoma",1,11));
				}
				{
					lblDescripcion = new JLabel();
					getContentPane().add(lblDescripcion);
					lblDescripcion.setText("Descripcion:");
					lblDescripcion.setBounds(30, 57, 104, 14);
					lblDescripcion.setFont(new java.awt.Font("Tahoma",1,11));
				}
				{
					txtDescripcion = new JTextField();
					getContentPane().add(txtDescripcion);
					txtDescripcion.setBounds(146, 53, 315, 28);
				}
				{
					ArrayList<Impuesto> imp=Servidor.impuestos().consultarImpuestos();
					cbmimp = new DefaultComboBoxModel(imp.toArray());
					
					cbImpuesto = new JComboBox();
					getContentPane().add(cbImpuesto);
					cbImpuesto.setModel(cbmimp);
					cbImpuesto.setBounds(146, 89, 145, 28);
				}
				{
					lblImpuesto = new JLabel();
					getContentPane().add(lblImpuesto);
					lblImpuesto.setText("Impuesto:");
					lblImpuesto.setBounds(30, 96, 79, 14);
					lblImpuesto.setFont(new java.awt.Font("Tahoma",1,11));
				}
				{
					lblComentarios = new JLabel();
					getContentPane().add(lblComentarios);
					lblComentarios.setText("Comentarios");
					lblComentarios.setBounds(69, 347, 93, 14);
					lblComentarios.setFont(new java.awt.Font("Tahoma",1,11));
				}
				{
					btAceptar = new JButton();
					getContentPane().add(btAceptar);
					btAceptar.setText("Aceptar");
					btAceptar.setBounds(330, 472, 79, 40);
					btAceptar.setVerticalTextPosition(JButton.BOTTOM);
					btAceptar.setHorizontalTextPosition(JButton.CENTER);
					btAceptar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Aceptar.png")));
				}
				{
					btSalir = new JButton();
					getContentPane().add(btSalir);
					btSalir.setText("Salir");
					btSalir.setBounds(447, 472, 79, 40);
					btSalir.setVerticalTextPosition(JButton.BOTTOM);
					btSalir.setHorizontalTextPosition(JButton.CENTER);
					btSalir.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Salir.gif")));
				}
				{
					jScrollPane3 = new JScrollPane();
					getContentPane().add(jScrollPane3);
					jScrollPane3.setBounds(69, 373, 410, 68);
					{
						txtaComentarios = new JTextArea();
						jScrollPane3.setViewportView(txtaComentarios);
						txtaComentarios.setBounds(69, 373, 219, 58);
					}
				}
				{
					ArrayList<TipoServicio> tservicios=Servidor.servicios().consultarTiposServicio();
					cbmtser = new DefaultComboBoxModel(tservicios.toArray());
					cbTipoServicio = new JComboBox();
					getContentPane().add(cbTipoServicio);
					cbTipoServicio.setModel(cbmtser);
					cbTipoServicio.setBounds(148, 14, 145, 28);
				}
				
			}
			this.setSize(574, 567);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	DlgServicio dser=this;
	public void mostrarIncluir(JDialog dialog) {
		
		setLocationRelativeTo(null);
		darFormatos();
		
		agregarQuitar();
		
		btAceptar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(!(Utilidades.campoVacio(dser, txtDescripcion, "Descripcion")))
				{   
					TipoServicio tser=(TipoServicio)cbTipoServicio.getSelectedItem();
					Impuesto imp=(Impuesto)cbImpuesto.getSelectedItem();
					Servicio ser=Servidor.servicios().agregarServicio(txtDescripcion.getText(), txtaComentarios.getText(), imp, tser, Status.ACTIVO);
					boolean inc=false;
					if(ser!=null)
					{	inc=true;
						for (int i = 0; i < tareas.size(); ++i)
						{  
							TareaServicio tarea_ser=Servidor.servicios().agregarTareaServicio(tareas.get(i), ser);
							if(tarea_ser==null)
								inc=false;
						}
						for (int i = 0; i < materiales_cant.size(); ++i)
						{  
							MaterialServicio material_ser=Servidor.servicios().agregarMaterialServicio(materiales_cant.get(i).material, ser,materiales_cant.get(i).cantidad);
							if(material_ser==null)
								inc=false;
						}
					}
					if(inc)
					{
						JOptionPane.showMessageDialog(dser, "Registro incluido exitosamente","Inclusion",JOptionPane.INFORMATION_MESSAGE);
						dser.dispose();
					}
					else
						JOptionPane.showMessageDialog(dser, "EL registro no pudo ser incluido","Inclusion",JOptionPane.ERROR_MESSAGE);
				}
			}
		});

		
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dser.dispose();
			}
		});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}
	
	public void mostrarModificar(JDialog dialog,final Servicio servicio) {
		
		setLocationRelativeTo(null);
		darFormatos();
		llenarDatos(servicio);
		
		agregarQuitar();
			
		btAceptar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(!(Utilidades.campoVacio(dser, txtDescripcion, "Descripcion")))
				{   leerDatos(servicio);
				    boolean b=false;
					if(Servidor.servicios().modificarServicio(servicio)!=null)
					{	b=true;
					    Servidor.servicios().eliminarTareasPorServicio(servicio.getCodigo());
					    Servidor.servicios().eliminarMaterialesPorServicio(servicio.getCodigo());
						for (int i = 0; i < tareas.size(); ++i)
						{  
							TareaServicio tarea_ser=Servidor.servicios().agregarTareaServicio(tareas.get(i), servicio);
							if(tarea_ser==null)
								b=false;
						}
						for (int i = 0; i < materiales_cant.size(); ++i)
						{  
							MaterialServicio material_ser=Servidor.servicios().agregarMaterialServicio(materiales_cant.get(i).material, servicio,materiales_cant.get(i).cantidad);
							if(material_ser==null)
								b=false;
						}
					}
					if(b)
					{
						JOptionPane.showMessageDialog(dser, "Registro modificado exitosamente","Modificacion",JOptionPane.INFORMATION_MESSAGE);
						dser.dispose();
					}
					else
						JOptionPane.showMessageDialog(dser, "EL registro no pudo ser modificado","Modificacion",JOptionPane.ERROR_MESSAGE);
				}
			}
		});
		
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dser.dispose();
			}
		});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}

	public void mostrarVer(JDialog dialog,Servicio servicio) {
		
		setLocationRelativeTo(null);
		
		btAceptar.setVisible(false);
		
		llenarDatos(servicio);
		deshabilitar();
        
				
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dser.dispose();
			}
		});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
		
	
		
	}
	
	public void agregarQuitar()
	{
		btAgregarm.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				DlgSeleccionarMaterial dsmat=new DlgSeleccionarMaterial(dser);
				Material mat=dsmat.mostrar(dser);
				boolean b=false;
				int i=0;
				if(mat!=null){
					while(i<materiales_cant.size()&& !b)
					{
					  if(mat==materiales_cant.get(i).material)
							b=true;
					  else
						  ++i;
					}
					if(!b) {  
						MaterialCantidad mcant=new MaterialCantidad(mat,1);
						materiales_cant.add(mcant);
						tbModelMateriales.fireTableDataChanged();
					}
					else
					{
						JOptionPane.showMessageDialog(dser, "El material ya esta en la lista","Valor duplicado",JOptionPane.INFORMATION_MESSAGE);
						tbMateriales.setRowSelectionInterval(i, i);
					}
				}
			}
		});
		
		btQuitarm.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(Utilidades.seleccion(tbMateriales, dser, "Material"))
				{  int i=dser.tbMateriales.getSelectedRow();
			       materiales_cant.remove(i);
			       tbModelMateriales.fireTableRowsDeleted(i, i);
			    }
			}
		});
		
		btAgregart.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				DlgSeleccionarTarea dstar=new DlgSeleccionarTarea(dser);
				Tarea tar=dstar.mostrar(dser);
				boolean b=false;
				int i=0;
				if(tar!=null){
					while(i<tareas.size()&& !b)
					{
					  if(tar==tareas.get(i))
							b=true;
					  else
						  ++i;
					}
					if(!b) {
						tareas.add(tar);
						tbModelTareas.fireTableDataChanged();
					}
					else
					{
						JOptionPane.showMessageDialog(dser, "La tarea ya esta en la lista","Valor duplicado",JOptionPane.INFORMATION_MESSAGE);
						tbTareas.setRowSelectionInterval(i, i);
					}
				}	
			}
		});
		
		btQuitart.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(Utilidades.seleccion(tbTareas, dser, "Tarea"))
				{  int i=dser.tbTareas.getSelectedRow();
			       tareas.remove(i);
			       tbModelTareas.fireTableRowsDeleted(i, i);
			    }
			}
		});
	}
	
	public void leerDatos(Servicio obj){
		obj.setDescripcion(txtDescripcion.getText());
		obj.setComentarios(txtaComentarios.getText());
		TipoServicio tser=(TipoServicio)cbTipoServicio.getSelectedItem();
		obj.setTipoServicio(tser);
		Impuesto imp=(Impuesto)cbImpuesto.getSelectedItem();
		obj.setImpuesto(imp);
		
	}
	public void llenarDatos(Servicio obj){
		txtDescripcion.setText(obj.getDescripcion());
		txtaComentarios.setText(obj.getComentarios());
		tareas_ser = Servidor.servicios().consultarTareasPorServicio(obj.getCodigo());
		for (int i = 0; i < tareas_ser.size(); ++i)
		{   Tarea tar=tareas_ser.get(i).getTarea();
			tareas.add(tar);
		}
		tbModelTareas.fireTableDataChanged();
		
		materiales_ser = Servidor.servicios().consultarMaterialesPorServicio(obj.getCodigo());
		
			for (int i = 0; i < materiales_ser.size(); ++i)
			{   MaterialCantidad mcant=new MaterialCantidad(materiales_ser.get(i).getMaterial(),materiales_ser.get(i).getCantidad());
			   if(mcant !=null)
					materiales_cant.add(mcant);
			}
		
		cbTipoServicio.setSelectedItem(obj.getTipoServicio());
		cbImpuesto.setSelectedItem(obj.getImpuesto());
	}
	
	public void darFormatos(){ 
		Utilidades.convertirMayuscula(txtDescripcion);
		Utilidades.convertirMayuscula(txtaComentarios);
	}
	public void deshabilitar(){
		btAgregarm.setEnabled(false);
		btAgregart.setEnabled(false);
		btQuitarm.setEnabled(false);
		btQuitart.setEnabled(false);
		txtDescripcion.setEnabled(false);
		txtaComentarios.setEnabled(false);
		cbTipoServicio.setEnabled(false);
		cbImpuesto.setEnabled(false);
		tbMateriales.setEnabled(false);
		tbTareas.setEnabled(false);
	}

}
